﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using EN = class_Entidad;

namespace class_DAO
{
    public class PREC_PROV_PROD_DAO
    {
        public static List<EN.PRODUCTO_EN> listaProducto_PPP(EN.PARAM_PREC_PROV_PROD_EN param)
        {
            List<EN.PRODUCTO_EN> Lista = new List<EN.PRODUCTO_EN>();
            SqlDataReader sdr;
            SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
            SqlCommand cmd = new SqlCommand("LISTA_PROV_PROD_PREC", cnx);
            try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@vCONSULTA", param.vConsulta);
                cmd.Parameters.AddWithValue("@vCOD_UBIGEO", param.vCOD_UBIGEO);
                cmd.Parameters.AddWithValue("@vID_TPROD", param.vID_TPROD);
                cmd.Parameters.AddWithValue("@vID_PROVEEDOR", param.vID_PROVEEDOR);
                cmd.Parameters.AddWithValue("@ID_PRODUCT", param.vID_PRODUCTO);

                cnx.Open();
                sdr = cmd.ExecuteReader();
                while (sdr.Read() == true)
                {
                    EN.PRODUCTO_EN be_Busqueda = new EN.PRODUCTO_EN();
                    be_Busqueda.ID_PRODUCTO = sdr.GetInt32(0);
                    be_Busqueda.NOM_PROD = sdr.GetString(1);
                    Lista.Add(be_Busqueda);
                }
                sdr.Close();
                sdr.Dispose();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (cnx.State != ConnectionState.Closed)
                {
                    cnx.Close();
                }
            }
            return Lista;
        }

        public static List<EN.PROVEEDOR_EN> listaProveedor_PPP(EN.PARAM_PREC_PROV_PROD_EN param)
        {
            List<EN.PROVEEDOR_EN> Lista = new List<EN.PROVEEDOR_EN>();
            SqlDataReader sdr;
            SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
            SqlCommand cmd = new SqlCommand("LISTA_PROV_PROD_PREC", cnx);
            try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@vCONSULTA", param.vConsulta);
                cmd.Parameters.AddWithValue("@vCOD_UBIGEO", param.vCOD_UBIGEO);
                cmd.Parameters.AddWithValue("@vID_TPROD", param.vID_TPROD);
                cmd.Parameters.AddWithValue("@vID_PROVEEDOR", param.vID_PROVEEDOR);
                cmd.Parameters.AddWithValue("@ID_PRODUCT", param.vID_PRODUCTO);

                cnx.Open();
                sdr = cmd.ExecuteReader();
                while (sdr.Read() == true)
                {
                    EN.PROVEEDOR_EN be_Busqueda = new EN.PROVEEDOR_EN();
                    be_Busqueda.ID_PROVEEDOR = sdr.GetInt32(0);
                    be_Busqueda.RAZON_SOC = sdr.GetString(1);
                    Lista.Add(be_Busqueda);
                }
                sdr.Close();
                sdr.Dispose();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (cnx.State != ConnectionState.Closed)
                {
                    cnx.Close();
                }
            }
            return Lista;
        }

        public static List<EN.PREC_PROV_PROD_EN> listaPrecioProducto_PPP(EN.PARAM_PREC_PROV_PROD_EN param)
        {
            List<EN.PREC_PROV_PROD_EN> Lista = new List<EN.PREC_PROV_PROD_EN>();
            SqlDataReader sdr;
            SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
            SqlCommand cmd = new SqlCommand("LISTA_PROV_PROD_PREC", cnx);
            try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@vCONSULTA", param.vConsulta);
                cmd.Parameters.AddWithValue("@vCOD_UBIGEO", param.vCOD_UBIGEO);
                cmd.Parameters.AddWithValue("@vID_TPROD", param.vID_TPROD);
                cmd.Parameters.AddWithValue("@vID_PROVEEDOR", param.vID_PROVEEDOR);
                cmd.Parameters.AddWithValue("@ID_PRODUCT", param.vID_PRODUCTO);

                cnx.Open();
                sdr = cmd.ExecuteReader();
                while (sdr.Read() == true)
                {
                    EN.PREC_PROV_PROD_EN be_Busqueda = new EN.PREC_PROV_PROD_EN();
                    be_Busqueda.ID_PRECIO = sdr.GetInt32(0);
                    be_Busqueda.PRECIO_CIGV = sdr.GetDecimal(1);
                    be_Busqueda.PRECIO_SIGV = sdr.GetDecimal(2);
                    Lista.Add(be_Busqueda);
                }
                sdr.Close();
                sdr.Dispose();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (cnx.State != ConnectionState.Closed)
                {
                    cnx.Close();
                }
            }
            return Lista;
        }
        public static List<EN.PREC_PROV_PROD_NOMBRE_EN> listaPrecioProducto_PPP_Nombre(EN.PARAM_PREC_PROV_PROD_EN param)
        {
            List<EN.PREC_PROV_PROD_NOMBRE_EN> Lista = new List<EN.PREC_PROV_PROD_NOMBRE_EN>();
            SqlDataReader sdr;
            SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
            SqlCommand cmd = new SqlCommand("LISTA_PROV_PROD_PREC", cnx);
            try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@vCONSULTA", param.vConsulta);
                cmd.Parameters.AddWithValue("@vCOD_UBIGEO", param.vCOD_UBIGEO);
                cmd.Parameters.AddWithValue("@vID_TPROD", param.vID_TPROD);
                cmd.Parameters.AddWithValue("@vID_PROVEEDOR", param.vID_PROVEEDOR);
                cmd.Parameters.AddWithValue("@ID_PRODUCT", param.vID_PRODUCTO);

                cnx.Open();
                sdr = cmd.ExecuteReader();
                while (sdr.Read() == true)
                {
                    EN.PREC_PROV_PROD_NOMBRE_EN be_Busqueda = new EN.PREC_PROV_PROD_NOMBRE_EN();
                    be_Busqueda.ID_PRECIO = sdr.GetInt32(0);
                    be_Busqueda.PRECIO_CIGV = sdr.GetDecimal(1);
                    be_Busqueda.PRECIO_SIGV = sdr.GetDecimal(2);
                    be_Busqueda.NOM_PROD = sdr.GetString(3);
                    be_Busqueda.NOMBRE_COMER = sdr.GetString(4);
                    be_Busqueda.FEC_REG = sdr.GetDateTime(5);
                    be_Busqueda.FEC_ACT = sdr.GetDateTime(6);
                    be_Busqueda.EST_PRE = sdr.GetInt32(7);
                    Lista.Add(be_Busqueda);
                }
                sdr.Close();
                sdr.Dispose();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (cnx.State != ConnectionState.Closed)
                {
                    cnx.Close();
                }
            }
            return Lista;
        }
        public static int RegistroPREC_PROV_PROD_(EN.PREC_PROV_PROD_EN param)
        {
            int Id = 0;

            SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
            SqlTransaction transaction;
            SqlCommand cmd = new SqlCommand("INS_PREC_PROV_PROD", cnx);
            //transaction = cnx.BeginTransaction("Registro");
            try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter sqlPrm = new SqlParameter("@vID_PROVEEDOR", SqlDbType.Int);
                sqlPrm.Value = param.ID_PROVEEDOR;
                sqlPrm.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm);

                SqlParameter sqlPrm2 = new SqlParameter("@vID_PRODUCTO", SqlDbType.Int);
                sqlPrm2.Value = param.ID_PRODUCTO;
                sqlPrm2.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm2);

                SqlParameter sqlPrm3 = new SqlParameter("@vPRECIO_SIGV", SqlDbType.Decimal);
                sqlPrm3.Value = param.PRECIO_SIGV;
                sqlPrm3.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm3);

                SqlParameter sqlPrm4 = new SqlParameter("@vPRECIO_CIGV", SqlDbType.Decimal);
                sqlPrm4.Value = param.PRECIO_CIGV;
                sqlPrm4.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm4);
                    
                SqlParameter sqlPrm5 = new SqlParameter("@vFEC_REG", SqlDbType.DateTime);
                sqlPrm5.Value = param.FEC_REG;
                sqlPrm5.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm5);

                SqlParameter sqlPrm6 = new SqlParameter("@vFEC_ACT", SqlDbType.DateTime);
                sqlPrm6.Value = param.FEC_ACT;
                sqlPrm6.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm6);

                SqlParameter sqlPrm7 = new SqlParameter("@vEST_PRE", SqlDbType.Int);
                sqlPrm7.Value = param.EST_PRE;
                sqlPrm7.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm7);

                SqlParameter sqlPrm8 = new SqlParameter("@vID_PREC_PROV_PROD", SqlDbType.Int);
                sqlPrm8.Value = param.EST_PRE;
                sqlPrm8.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(sqlPrm8);

                cnx.Open();
                cmd.ExecuteNonQuery();
                Id = Convert.ToInt32(cmd.Parameters["@vID_PREC_PROV_PROD"].Value);
                cnx.Close();

            }
            catch (Exception ex)
            {
                //transaction.Rollback();
                cnx.Close();
                throw ex;
            }
            finally
            {
                if (cnx.State != ConnectionState.Closed)
                {
                    //transaction.Commit();
                    cnx.Close();
                }
            }

            return Id;
        }
        //public List<EN.PRODUCTO_EN> list_Prov(EN.PARAM_PREC_PROV_PROD_EN param)
        //{
        //    List<EN.PRODUCTO_EN> lista = new List<EN.PRODUCTO_EN>();
        //    SqlDataReader sdr;
        //    SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
        //    SqlCommand cmd = new SqlCommand("LISTA_PROV_PROD_PREC", cnx);
        //    try
        //    {
        //        cmd.CommandType = CommandType.StoredProcedure;
        //        cmd.Parameters.AddWithValue("@vCONSULTA", param.vConsulta);
        //        cmd.Parameters.AddWithValue("@vCOD_UBIGEO", 0param.vCOD_UBIGEO);
        //        cmd.Parameters.AddWithValue("@vID_TPROD", param.vID_TPROD);
        //        cmd.Parameters.AddWithValue("@vID_PROVEEDOR", param.vID_PROVEEDOR);
        //        cmd.Parameters.AddWithValue("@ID_PRODUCT", param.vID_PRODUCTO);

        //        cnx.Open();
        //        sdr = cmd.ExecuteReader();
        //        while (sdr.Read() == true)
        //        {
        //            EN.PRODUCTO_EN be_Busqueda = new EN.PRODUCTO_EN();
        //            be_Busqueda.ID_PRODUCTO = sdr.GetInt32(0);
        //            be_Busqueda.NOM_PROD = sdr.GetString(1);
        //            be_Busqueda.MARCA = sdr.GetString(2);
        //            be_Busqueda.DESCRIPCION = sdr.GetString(3);
        //            be_Busqueda.ID_TPROD = sdr.GetInt32(4);
        //            be_Busqueda.EST_PROD = (be_Busqueda.EST_PROD == null) ? 0 : sdr.GetInt32(5);
        //            be_Busqueda.DES_EST_PROD = (be_Busqueda.EST_PROD == 1) ? "ACTIVO" : "INACTIVO";
        //            Lista.Add(be_Busqueda);
        //        }
        //        sdr.Close();
        //        sdr.Dispose();
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    finally
        //    {
        //        if (cnx.State != ConnectionState.Closed)
        //        {
        //            cnx.Close();
        //        }
        //    }
        //    return lista;
        //}
    }
}
